// Loesung_von_Aufgabe_4.7_4_Spiralbahn

float z;
float r; // Radius der Spiralbahn
float w1; // Winkel in Grad für die Rotation um die x-Achse
float w2; // Winkel in Grad für die Bewegung der Elektronen

void setup()
{
  size(600, 400, P3D); // 3D-Raum
}

void draw()
{
  background(255);

  // Koordinatenkreuz zeichnen
  stroke(150);
  strokeWeight(1);
  line(0, 200, 600, 200);
  line(300, 0, 300, 400);

  // Verschiebung des Koordinatenursprungs in die Fenstermitte
  translate(300, 200, 0);

  // Drehbewegung der Spiralbahn um die x-Achse
  rotateX(radians(w1));
  w1 = w1 + 0.3;

  /* Zur Vermeidung von optischen Irritationen wird die
   Spiralbahn mit einer Mittellinie versehen */
  stroke(0, 255, 0);
  strokeWeight(6);
  line(0, 0, -80, 0, 0, 200);
  strokeWeight(18);
  point(0, 0, -80);

  // Spiralbahn zeichnen mit 7 Umdrehungen minus 20° (7 * 360° - 20° = 2500°)
  for (r = 0, w2 = 90, z = 0; w2 < 2500 && z < 300; r = r + 0.05, w2++, z = z + 0.08)
  {
    stroke(0, 0, 255);
    strokeWeight(3);
    point((r*cos(radians(w2))), (r*sin(radians(w2))), z);
  }

  /* Die Bilder für den Film werden solange aufgezeichnet, wie eine Taste auf der 
   Maus gedrückt wird.
   Während der Aufzeichnung erscheint ein roter Punkt im Fenster, der jedoch nicht mit 
   aufgezeichnet wird. */
  if (mousePressed) // beliebige Maustaste
  {
    saveFrame("Bilder/SB_####.jpg"); 
    stroke(255, 0, 0);
    strokeWeight(50);
    point(0, 0, 0);
  }
}